From: Jasper St. Pierre Date: Mon, 12 Aug 2013 10:56:51 +0000 (-0400) Subject: system: Use the username if the user's name is too long X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~3774 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=3e4d0954b532f2f4973306627c0a72a299b3cc68;p=gnome-shell.git system: Use the username if the user's name is too long This is a part of the new system status design, see https://wiki.gnome.org/GnomeShell/Design/Guidelines/SystemStatus/ for design details. https://bugzilla.gnome.org/show_bug.cgi?id=705845 --- diff --git a/js/ui/status/system.js b/js/ui/status/system.js index a4674c7f0..74eb00266 100644 --- a/js/ui/status/system.js +++ b/js/ui/status/system.js @@ -152,6 +152,17 @@ const Indicator = new Lang.Class({ _updateSwitchUserSubMenu: function() { this._switchUserSubMenu.label.text = this._user.get_real_name(); + let clutterText = this._switchUserSubMenu.label.clutter_text; + + // XXX -- for some reason, the ClutterText's width changes + // rapidly unless we force a relayout of the actor. Probably + // a size cache issue or something. Moving this to be a layout + // manager would be a much better idea. + clutterText.get_allocation_box(); + + let layout = clutterText.get_layout(); + if (layout.is_ellipsized()) + this._switchUserSubMenu.label.text = this._user.get_user_name(); let iconFile = this._user.get_icon_file(); if (iconFile && !GLib.file_test(iconFile, GLib.FileTest.EXISTS)) @@ -210,6 +221,15 @@ const Indicator = new Lang.Class({ this._switchUserSubMenu = new PopupMenu.PopupSubMenuMenuItem('', true); this._switchUserSubMenu.icon.style_class = 'system-switch-user-submenu-icon'; + // Since the label of the switch user submenu depends on the width of + // the popup menu, and we can't easily connect on allocation-changed + // or notify::width without creating layout cycles, simply update the + // label whenever the menu is opened. + this.menu.connect('open-state-changed', Lang.bind(this, function(menu, isOpen) { + if (isOpen) + this._updateSwitchUserSubMenu(); + })); + item = new PopupMenu.PopupMenuItem(_("Switch User")); item.connect('activate', Lang.bind(this, this._onLoginScreenActivate)); this._switchUserSubMenu.menu.addMenuItem(item);